Computer systems need a way to store and retrieve data from a variety of data devices made by various manufacturers, such as disk drives, printers, display screens, scanners, and so on. In the past, each computer typically had its own directly-attached devices, which no other computer was capable of using. But, this was a cumbersome and expensive design because sharing data among computers was difficult and a particular device might stay idle and unused for lengthy periods.
In order to overcome the aforementioned cumbersome and expensive solutions, computers are connected in networks, and one computer (often called a client or a host) is allowed to store and retrieve data from another computer's (often called server) devices. Many clients have a need for their data to always be available. In order to ensure high availability of the data, some networks have built-in redundancy with multiple paths or connections via multiple servers to a device, so that if one path fails, the device may be still accessible through another path.
Multiple paths are used to help ensure that a connection between the computing device and the network is still viable even if one or more of the paths fail. Failover operations help maintain “normal” operations even when problems caused by interrupted service, etc. arise in the network. In addition, multiple paths provide the capacity for load balancing. Load balancing consists of dividing the amount of work that needs to be done between two or more paths (or components), to achieve higher efficiency. Load balancing can be implemented with hardware, software, or a combination of both.
Typical multiple path software provides the functionality for both failover processing and load balancing. However, such multiple path software requires using a proprietary manufacturer's disk specific multiple path failover driver implemented on the driver stack of host computers. For example, EMC storage array will require an EMC disk specific multiple path failover driver implemented on a host computer driver stack to connect to an alternate path, IBM storage array will require an IBM disk specific multiple path failover driver to be implemented on the host computer driver stack to connect to an alternative path, and so on.
The problem with using the manufacturer disk specific failover drivers is they can be very expensive and can require special proprietary manufacturer specific commands to access storage arrays. Furthermore, using the manufacturer disk specific failover drivers can limit the host computers to using their own storage arrays. This is because of the requirement of using proprietary commands to communicate with the storage router when a failover occurs.
Often, users are not willing to pay such a steep price for obtaining the failover and load balancing features of multiple path input/output (I/O) software. In addition, users often will not require all of the features provided by an expensive multiple path I/O software package, but may still desire a reliable multiple path implementation. Furthermore, users do not want to be limited to using storage arrays of a single manufacturer, they would prefer to use storage arrays made by different manufacturers to suit their needs.
Thus, there is a need for a technique that can connect to a target by seeking an alternate path to maintain connectivity, when the selected path fails, without having to use such manufacturer specific failover drivers in the driver stack of an operating system of a host computer. Further, there is a need for a technique that is not dependent on using a specific manufacturer's storage array. Furthermore, there is a need for a cheap and reliable multiple path processing technique.